#ifndef MESSAGETYPES_H
#define MESSAGETYPES_H
#include "Message.h"
#include "Args.h"
#include <QVector>
#include <QColor>
class SwapLayerMessage:public Message
{
public:
	int destLayerIndex;
	MessageType returnType()
	{
		return swapLayerMessage;
	}
	SwapLayerMessage(int i):destLayerIndex(i)
	{

	}
	int returnDestLayerIndex()
	{
		return destLayerIndex;
	}
};
class NodeConvertMessage:public Message
{
	NodeType destType;
public:
	NodeConvertMessage()
	{
	}
	~NodeConvertMessage()
	{
	}
	NodeConvertMessage(NodeType d):destType(d)
	{
	}
	MessageType returnType()
	{
		return nodeConvertMessage;
	}
	NodeType getConvertType()
	{
		return destType;
	}
};
class SetStaticPropertyMessage:public Message
{
public:
	SetStaticProperArgs args;
	SetStaticPropertyMessage()
	{
	}
	SetStaticPropertyMessage(SetStaticProperArgs a):args(a)
	{
	}
	~SetStaticPropertyMessage()
	{
	}
	MessageType returnType()
	{
       return setStaticPropertyMessage;
	}
	SetStaticProperArgs getStaticSetArgs()
	{
		return args;
	}

};
class CloseProjectMessage:public Message
{
public:
	CloseProjectMessage()
	{
	}
	~CloseProjectMessage()
	{
	}
	MessageType returnType()
	{
		return closeProjectMessage;
	}

};
class CreateNewProjectMessage:public Message
{
private:
    NewProjectArgs args;
public :
    CreateNewProjectMessage(NewProjectArgs a):args(a)
    {

    }
    ~CreateNewProjectMessage()
    {

    }
   MessageType returnType()
    {
        return createNewProjectMessage;
    }
    NewProjectArgs getNewProjectArgs()
    {
        return args;
    }
};
class SelectContainerMessage:public Message
{
public:
    nodePath currentContainerNodePath;
	int index;
	int messageType;
	
    SelectContainerMessage(nodePath ci):currentContainerNodePath(ci),messageType(0)
    {
		messageType=0;
    }
	SelectContainerMessage():messageType(1)
	{
		messageType=1;
	}
	SelectContainerMessage(int i):index(i),messageType(2)
	{
		messageType=2;
	}
    ~SelectContainerMessage()
    {

    }
    nodePath getSelectContainerNodePath()
    {
        return this->currentContainerNodePath;
    }
	MessageType returnType()
	{
		return selectContainerMessage;
	}
};
class SelectObjectsMessage:public Message
{
public:
    SelectObjectsArgs args;
    SelectObjectsMessage(SelectObjectsArgs a):args(a)
    {

    }
    ~SelectObjectsMessage()
    {
    }
    MessageType returnType()
    {
		return selectObjectsMessage;
    }
    SelectObjectsArgs getSelectObjectsArgs()
    {
        return this->args;
    }
};
class CancleCurrentEditObjectsMessage:public Message
{
public:
    CancleCurrentEditObjectsMessage()
    {

    }
    ~CancleCurrentEditObjectsMessage()
    {

    }
    MessageType returnType()
    {
        return cancleCurrentEditObjectMessage;
    }
};
class SetPropertyValueMessage:public Message
{
public:
    SetArgs args;
    SetPropertyValueMessage(SetArgs sa):args(sa)
    {

    }
    ~SetPropertyValueMessage()
    {

    }
    SetArgs getSetArgs()
    {
        return this->args;
    }
	MessageType returnType()
	{
		return setPropertyValueMessage;
	}
};
class NewNodeMessage:public Message
{
public:
    NewNodeArgs args;
    NewNodeMessage(NewNodeArgs arg):args(arg)
    {

    }
    ~NewNodeMessage()
    {

    }
    NewNodeArgs getNewNodeArgs()
    {
        return this->args;
    }
	MessageType returnType()
	{
		return newNodeMessage;
	}
};
class DeleteNodeMessage:public Message
{
public:
	int type;
	nodePath deletePath;
	int index;
    DeleteNodeMessage(nodePath in):deletePath(in)
    {
		type=0;
    }
	DeleteNodeMessage(int x):index(x)
	{
		type=1;
	}
    ~DeleteNodeMessage()
    {

    }
    nodePath getDeleteNodePath()
    {
        return this->deletePath;
    }
	MessageType returnType()
	{
		return deleteNodeMessage;
	}
};
class UndoMessage:public Message
{
public :
    UndoMessage()
    {

    }
    ~UndoMessage()
    {

    }
	MessageType returnType()
	{
		return undoMessage;
	}
};
class RedoMessage:public Message
{
public :
    RedoMessage()
    {

    }
    ~RedoMessage()
    {

    }
	MessageType returnType()
	{
		return redoMessage;
	}
};
class SaveMessage:public Message
{
public :
    QString savepath;
    SaveMessage(QString path):savepath(path)
    {

    }
    ~SaveMessage()
    {

    }
    QString getSavePath()
    {
        return savepath;
    }
	MessageType returnType()
	{
		return saveMessage;
	}
};
class GenerateJsMessage:public Message
{
public:
    QString path;
    GenerateJsMessage(QString p):path(p)
    {

    }
    ~GenerateJsMessage()
    {

    }
    QString getJsPath()
    {
        return path;
    }
	MessageType returnType()
	{
		return generateJsMessage;
	}
};
class OpenProjectMessage:public Message
{
public:
	OpenProjectArgs args;
	OpenProjectMessage()
	{
	}
	OpenProjectMessage(OpenProjectArgs a):args(a)
	{
	}
	~OpenProjectMessage()
	{
	}
	OpenProjectArgs  getOpenArgs()
	{
		return args;
	}
	MessageType returnType()
	{
		return openProjectMessage;
	}
};
class AddPointMessage:public Message
{
   AddPointArgs args;
public:
	AddPointMessage()
	{
	}
	~AddPointMessage()
	{
	}
	AddPointMessage(AddPointArgs a):args(a)
	{
	}
	MessageType returnType()
	{
		return addPointMessage;
	}
	AddPointArgs getAddPointArgs()
	{
		return this->args;
	}
};
class MovePointMessage:public Message
{
	MovePointArgs args;
public:
	MovePointMessage()
	{
	}
	~MovePointMessage()
	{
	}
	MovePointMessage(MovePointArgs a):args(a)
	{
	}
	MessageType returnType()
	{
		return movePointMessage;
	}
	MovePointArgs getMovePointArgs()
	{
		return args;
	}
};
class DeletePointMessage:public Message
{
	int deleteIndex;
public:
	DeletePointMessage()
	{
	}
	~DeletePointMessage()
	{
	}
	DeletePointMessage(int index):deleteIndex(index)
	{
	}
	MessageType returnType()
	{
		return deletePointMessage;
	}
	int getDeletePointIndex()
	{
		return deleteIndex;
	}

};
class ChangePointTypeMessage:public Message
{
	ChangePointTypeArgs args;
public:
	ChangePointTypeMessage(){}
	~ChangePointTypeMessage(){}
	ChangePointTypeMessage(ChangePointTypeArgs a):args(a)
	{
	}
	MessageType returnType()
	{
		return changePointTypeMessage;
	}
	ChangePointTypeArgs getChangePointTypeArgs()
	{
		return args;
	}
};
class SetGradientMessage:public Message
{
	SetGradientArgs args;
public:
	SetGradientMessage(){}
	~SetGradientMessage(){}
	SetGradientMessage(SetGradientArgs a):args(a){}
	MessageType returnType()
	{
		return setGradientMessage;
	}
	SetGradientArgs getGradientArgs()
	{return args;}
};
#endif // MESSAGETYPES_H
